/**
 * @brief
 * @details
 * @author    Yin
 * @version   1.0
 * @date
 * @copyright
 * @note
 */

#ifndef DATACONVERTTOOL_H
#define DATACONVERTTOOL_H

#include "common_global.h"

#include <QObject>

namespace Common {

/**
 * @brief    浮点数联合体
 */
union PacketFloat
{
    float f;           ///< 浮点数
    quint8 buf[4];     ///< 浮点数
};

class COMMONSHARED_EXPORT DataConvertTool : public QObject
{
    Q_OBJECT
public:
    explicit DataConvertTool(QObject *parent = nullptr);
    ~DataConvertTool();

public:
    /**
     * @brief  float2ByteArray float类型转QByteArray
     * @param  num             待转值
     * @param  isBigEndian     true：大端  false：小端
     * @return QByteArray
     */
    static QByteArray floatToByteArray(float num, bool isBigEndian = true);

    /**
     * @brief  byteArray2Float QByteArray转float
     * @param  arr             待转值
     * @param  isBigEndian     true：大端  false：小端
     * @return float
     */
    static float byteToArrayFloat(QByteArray arr, bool isBigEndian = true);

    /**
     * @brief  float2StringHex float转十六进制字符串
     * @param  num             待转值
     * @param  isBigEndian     true：大端  false：小端
     * @return QString
     */
    static QString floatToStringHex(float num, bool isBigEndian = true);

    /**
     * @brief  stringHex2Float 十六进制字符串转float
     * @param  strHex          十六进制字符串
     * @param  isBigEndian     true：大端  false：小端
     * @return float
     */
    static float stringHexToFloat(QString strHex, bool isBigEndian = true);

    /**
     * @brief  int2ByteArray int转QByteArray
     * @param  num           待转值
     * @param  isBigEndian   true：大端  false：小端
     * @return QByteArray
     */
    static QByteArray intToByteArray(int num, bool isBigEndian = true);

    /**
     * @brief  byteArray2Int QByteArray转int
     * @param  arr 			 待转值
     * @param  isBigEndian 	 true：大端  false：小端
     * @return int
     */
    static int byteArrayToInt(QByteArray arr, bool isBigEndian = true);

    /**
     * @brief  int2StringHex Int转十六进制QString
     * @param  num           待转数
     * @param  len           QString长度
     * @param  isBigEndian   true：大端  false：小端
     * @return QString
     */
    static QString intToStringHex(int num, int len = 8, bool isBigEndian = true);

    /**
     * @brief  stringHex2Int  16进制字符串转Int
     * @param  hexStr         16进制字符串
     * @param  isBigEndian    true：大端  false：小端
     * @return int
     */
    static int stringHexToInt(QString hexStr, bool isBigEndian = true);

};

}

#endif // DATACONVERTTOOL_H
